package com.huaxin.common;


import com.huaxin.common.Entity.AllOrgDTO;
import com.huaxin.common.Entity.AppVersionDTO;
import com.huaxin.common.Entity.AreaOrgDTO;
import com.huaxin.common.Entity.AroundItemDTO;
import com.huaxin.common.Entity.ArrangeTaskPauseDTO;
import com.huaxin.common.Entity.ArrangeUserDTO;
import com.huaxin.common.Entity.ArrangeWorkTaskDTO;
import com.huaxin.common.Entity.BaseDTO;
import com.huaxin.common.Entity.BigDeviceDTO;
import com.huaxin.common.Entity.CheckPoint;
import com.huaxin.common.Entity.CheckTaskDetailDTO;
import com.huaxin.common.Entity.CollectDTO;
import com.huaxin.common.Entity.DeviceDataListDTO;
import com.huaxin.common.Entity.DeviceImgDTO;
import com.huaxin.common.Entity.DeviceListDTO;
import com.huaxin.common.Entity.DriverListDTO;
import com.huaxin.common.Entity.EquHistoryDTO;
import com.huaxin.common.Entity.EquipmentDTO;
import com.huaxin.common.Entity.FanSwitchBean;
import com.huaxin.common.Entity.FeedBackListDTO;
import com.huaxin.common.Entity.FindInfo;
import com.huaxin.common.Entity.FindSearchBean;
import com.huaxin.common.Entity.FrendCircleBean;
import com.huaxin.common.Entity.HeadPortrait;
import com.huaxin.common.Entity.HxBulletinList;
import com.huaxin.common.Entity.HxChangeValveBean;
import com.huaxin.common.Entity.HxCheckOrgBean;
import com.huaxin.common.Entity.HxCommitTaskDetailBean;
import com.huaxin.common.Entity.HxFacilityTaskDetailBean;
import com.huaxin.common.Entity.HxInHousePollingBean;
import com.huaxin.common.Entity.HxMaintenanceDTO;
import com.huaxin.common.Entity.HxPunchCardReportBean;
import com.huaxin.common.Entity.HxPunchCardSignBean;
import com.huaxin.common.Entity.HxPunchCardSummaryBean;
import com.huaxin.common.Entity.HxPunchCardViewBean;
import com.huaxin.common.Entity.HxRegisterBean;
import com.huaxin.common.Entity.HxSPTTargetDTO;
import com.huaxin.common.Entity.HxScAppVersionDTO;
import com.huaxin.common.Entity.HxScStaionListBean;
import com.huaxin.common.Entity.HxScStationRealDTO;
import com.huaxin.common.Entity.HxScSyncDataDTO;
import com.huaxin.common.Entity.HxUserTagBean;
import com.huaxin.common.Entity.HxVideoInfoDTO;
import com.huaxin.common.Entity.HxWarningBean;
import com.huaxin.common.Entity.InfoMainTypeListDTO;
import com.huaxin.common.Entity.InfoOrTypeListDTO;
import com.huaxin.common.Entity.PlanContentDTO;
import com.huaxin.common.Entity.RepairListDTO;
import com.huaxin.common.Entity.RepairTaskDetailDTO;
import com.huaxin.common.Entity.RepairUPDTO;
import com.huaxin.common.Entity.RepoContentDTO;
import com.huaxin.common.Entity.RepositoryDTO;
import com.huaxin.common.Entity.SVGViewDTO;
import com.huaxin.common.Entity.ScStationColumnDTO;
import com.huaxin.common.Entity.ScStationDTO;
import com.huaxin.common.Entity.SearchDTO;
import com.huaxin.common.Entity.SignHistoryDTO;
import com.huaxin.common.Entity.SignInfoDTO;
import com.huaxin.common.Entity.SmallDeviceDTO;
import com.huaxin.common.Entity.StationColumnDTO;
import com.huaxin.common.Entity.StationDTO;
import com.huaxin.common.Entity.StationImgDTO;
import com.huaxin.common.Entity.StationListDTO;
import com.huaxin.common.Entity.SvgEntity;
import com.huaxin.common.Entity.TargetRunStataDTO;
import com.huaxin.common.Entity.TaskRoutDTO;
import com.huaxin.common.Entity.UserDTO;
import com.huaxin.common.Entity.UserInfoDTo;
import com.huaxin.common.Entity.UserListDTO;
import com.huaxin.common.Entity.WaterIntakeDTO;
import com.huaxin.common.Entity.WorkFlowDTO;
import com.huaxin.common.Entity.WorkFlowTaskDTO;
import com.huaxin.common.Entity.WorkTaskListDTO;
import com.huaxin.common.model.ContactModel;
import com.huaxin.common.model.FileMsgResponseBean;
import com.huaxin.hxcloud.work.entity.StationTargetDTO;

import java.util.List;

import okhttp3.MultipartBody;
import okhttp3.RequestBody;
import okhttp3.ResponseBody;
import retrofit2.Call;
import retrofit2.http.Field;
import retrofit2.http.FormUrlEncoded;
import retrofit2.http.GET;
import retrofit2.http.Multipart;
import retrofit2.http.POST;
import retrofit2.http.Part;
import retrofit2.http.Path;
import retrofit2.http.Query;
import retrofit2.http.Streaming;
import retrofit2.http.Url;
import rx.Observable;

/**
 * Created by Administrator on 2016/9/6.
 */
public interface RequestApi {


/*   对注解的说明
    常用的方法注解有@GET@POST@Multipart@FormUrlEncoded
    @POST请求可以添加@Multipart@FormUrlEncoded
    @FormUrlEncoded注解对应enctype为application/x-www-form-urlencoded类型，请求参数使用@Field注解，
    @Multipart注解对应enctype为multipart/form-data类型 适用于文件上传，参数使用@Part注解

    @GET请求参数使用@Query注解@GET可以添加@Multipart@FormUrlEncoded

    一般的参数类型为String、RequestBody（String最终还是封装成RequestBody类型），文件上传还支持MultipartBody.Part类型

    RequestBody类型，文件上传Part参数中除了参数名还必须要带filename，否则服务器端会解析成文本格式
    例如@Part("file\"; filename=\"default") RequestBody file
    使用RequestBody requestBody = RequestBody.create(MediaType.parse("multipart/form-data"), file)将File转化为RequestBody类型

    MultipartBody.Part类型，Part不需要写参数
    例如@Part MultipartBody.Part  file
    使用MultipartBody.Part part = MultipartBody.Part.createFormData("file", file.getName(), requestBody);将RequestBody转化为MultipartBody.Part类型

    常用的参数注解有@Field@Query@Part@Header@Path，参数比较多的情况可以使用对面的Map类型@FieldMap例如@FieldMap Map<String, String> names
    @Path注解的阐述可以替换url中对应的路径，可用于多版本控制
    @GET("users/{type}/login")
    Call<String> listRepos(@Path("type") String type ,@Query("id") String id);
    @Header注解的参数会添加到请求头中

    新增的UploadFileRequestBody是对在RequestBody进度回调的封装
    RequestBody requestBody = new ProgressRequestBody(file,listener);

    */

    @Multipart
    @POST("/chat/uploadFile4")
    Call<String> upload4(@Part("description") String description,
                         @Part("file\"; filename=\"filename.file") RequestBody file);

    //一般的post请求
    @FormUrlEncoded
    @POST("/login2.json")
    Call<UserDTO> login2(@Field("username") String username, @Field("password") String password);


    //监听进度的文件上传
    //使用UploadFileRequestBody(file，listener)将File封装为RequestBody类型，listener进度监听
    @Multipart
    @POST("//{path}/broker/chat/uploadFile")
    Call<String> singleFileUpload(@Path("path") String path, @Part MultipartBody.Part file);

    @Multipart
    @POST("/app/chat/uploadFile")
    Call<String> uploadMsgFile(@Part MultipartBody.Part file);

    @GET("/map/getAllAreas")
    Call<String> getAllAreas();

    @GET("/app/userInfo")
    Observable<UserInfoDTo> testOservable();


    //监听进度的文件上传
    //使用UploadFileRequestBody(file，listener)将File封装为RequestBody类型，listener进度监听
    @Multipart
    @POST("/chat/uploadFile")
    Call<String> singleFileUpload(@Part MultipartBody.Part file);

    @Multipart
    @POST("/app/chat/uploadFile")
    Call<FileMsgResponseBean> uploadMsgFile2(@Part MultipartBody.Part file);

    @Multipart
    @POST("/chat/uploadFile3")
    Call<String> multiFileUpload(@Part List<MultipartBody.Part> files); //参数支持集合类型

    //测试结果 part除了参数名还必须要带filename，否则服务器端会解析成文本格式
    @Multipart
    @POST("/chat/uploadFile2")
    Call<String> mixUpload(@Part("file\"; filename=\"default") RequestBody file, @Part("filename") String filename);

    @GET("/vgview/findByOrgCode.json")
    Call<List<SvgEntity>> getSvgList(@Query("orgCode") String orgCode);


    @Multipart
    @POST("/app/sweep1")
    Call<BaseDTO> sweep1(@Part MultipartBody.Part file);


    /*******************************************分割线*********************************************/
    /**
     * 登录
     *
     * @param username
     * @param password
     * @return
     */
    @GET("/app/login")
    Call<UserDTO> login(@Query("username") String username, @Query("password") String password);

    /**
     * 联系人
     *
     * @return
     */
    @GET("/app/userList")
    Call<String> getUserList();

    @GET("/app/userList")
    Call<ContactModel> downloadContact();

    /**
     * 用户信息
     *
     * @return
     */
    @GET("/app/userInfo")
    Call<UserInfoDTo> getUserInfo();


    /**
     * 获取站点视频信息
     *
     * @param stationCode
     * @return
     */
    @GET("/app/videoInfo")
    Call<HxVideoInfoDTO> getVideoInfo(@Query("stationCode") String stationCode);


    @GET("/app/acceptArrangeTask")
    Call<BaseDTO> startArrangeTask(@Query("arrangeTaskId") Integer arrangeTaskId);

    /**
     * 关闭任务单
     *
     * @param arrangeTaskId
     * @return
     */
    @GET("/app/closeArrangeTask")
    Call<BaseDTO> closeArrangeTask(@Query("arrangeTaskId") Integer arrangeTaskId);

    /**
     * 完成工单上传费用
     *
     * @param arrangeTaskId
     * @param fee
     * @return
     */
    @GET("/app/uploadArrangeTaskCost")
    Call<BaseDTO> uploadArrangeTaskCost(@Query("arrangeTaskId") Integer arrangeTaskId, @Query("cost") String fee);


    @GET("/app/findOrgStations")
    Call<StationListDTO> getStationList(@Query("orgCode") String orgCode, @Query("stationCode") String stationCode);


    @POST("/app/commitXunJianRemark")
    @Multipart
    Call<BaseDTO> commitXunJianRemark(@Part("stationCode") String stationCode, @Part("itemType") int itemType, @Part("itemId") int id, @Part("remark") String des, @Part List<MultipartBody.Part> fileParts);


    @POST("/app/commitAroundItem")
    @Multipart
    Call<AroundItemDTO> commitAroundItem(@Part("itemId") int id, @Part("state") int state, @Part("des") String des, @Part List<MultipartBody.Part> fileParts);

    @POST("/app/commitCheckPoint")
    @Multipart
    Call<CheckPoint> commitCheckPoint(@Part("itemId") int id, @Part("state") int state, @Part("des") String des, @Part List<MultipartBody.Part> fileParts);

    @GET("/app/signInfo")
    Call<SignInfoDTO> getSignInfo(@Query("lng") double longitude, @Query("lat") double latitude);


    @GET("/information/app/getMainInfoType")
    Call<InfoMainTypeListDTO> getMainInfoType();

    @GET("/information/app/getInfoOrType")
    Call<InfoOrTypeListDTO> getInfoOrType(@Query("typeId") int typeId, @Query("pageNo") int pageNo);

    @GET("/app/acceptArrangeTask")
    Call<BaseDTO> acceptArrangeTask(@Query("arrangeTaskId") int arrangeTaskId);

    /**
     * 完成任务单接口
     *
     * @param workTaskId        任务单ID
     * @param stationCode       站点编号
     * @param resolvent         解决办法
     * @param files             上传图片文件
     * @param malfunctionReason 故障原因
     * @param medicineTypeSel   加药类型及相对应的药量
     */
    @POST("/app/commitWorkTask")
    @Multipart
    Call<BaseDTO> commitRepairWorkTask(@Part("workTaskId") int workTaskId,
                                       @Part("stationCode") String stationCode,
                                       @Part("resolvent") String resolvent,
                                       @Part List<MultipartBody.Part> files,
                                       @Part("malfunctionReason") String malfunctionReason,
                                       @Part("medicineTypeSel") String medicineTypeSel);

    @POST("/app/commitMaterial")
    @Multipart
    Call<BaseDTO> commitMaterial(@Part("workTaskId") int workTaskId, @Part("materialData") String materialData);

    @GET("/app/commitLngLat")
    Call<BaseDTO> commitLngLat(@Query("lng") double longitude, @Query("lat") double latitude);

    @GET("/app/checkVersion")
    Call<AppVersionDTO> checkUpdate(@Query("version") String versionName, @Query("type") int i);


    @POST("/app/addSuggestion")
    @Multipart
    Call<BaseDTO> addSuggestion(@Part("type") int type, @Part("content") String s, @Part List<MultipartBody.Part> fileParts);

    @POST("/app/commitHead")
    @Multipart
    Call<HeadPortrait> commitHead(@Part MultipartBody.Part file);


    /**
     * 根据手机号搜索用户
     *
     * @param phoneNum
     * @return
     */
    @GET("/userFriend/searchByPhoneNum")
    Call<UserDTO> findFriendByPhone(@Query("phoneNum") String phoneNum);

    //搜索附近用户
    @GET("/userFriend/searchByLonLat")
    Call<UserListDTO> findFriendByNear(@Query("lon") double lon, @Query("lat") double lat);

    //添加好友
    @GET("/userFriend/addFriend")
    Call<BaseDTO> addFriend(@Query("userId") String userId, @Query("friendId") String friendId);

    //删除好友
    @GET("/userFriend/delFriend")
    Call<BaseDTO> delFriend(@Query("userId") String userId, @Query("friendId") String friendId);


    @POST("/app/verificationCode/create")
    @Multipart
    Call<BaseDTO> verificationCode(@Part("phone") String phone);

    @POST("/app/user/register")
    Call<HxRegisterBean> register(@Query("orgCode") String orgCode, @Query("phone") String phone, @Query("userName") String userName,
                                  @Query("nickName") String nickName, @Query("password") String password, @Query("verificationCode") String verificationCode);

    //获取好友列表
    @GET("/userFriend/findFriendList")
    Call<UserListDTO> findFriendList(@Query("userId") String userId);

    //编辑用户昵称
    @GET("/app/updateUserInfo")
    Call<BaseDTO> modifyName(@Query("nickName") String nickName);

    //编辑用户简介
    @GET("/app/updateUserIntroduction")
    Call<BaseDTO> modifyIntro(@Query("content") String intro);

    @GET("/app/updateUserInfo")
    Call<BaseDTO> modifySex(@Query("sex") String sex);

    //解散群
    @POST("/app/deleteGroup")
    Call<BaseDTO> deleteGroup(@Query("clientId") String groupId);

    //解散群
    @POST("/app/userMessage")
    Call<String> userMessage(@Query("userId") String userId);

    @POST("app/captcha/create/forLoginKeyReset")
    @Multipart
    Call<BaseDTO> verificationCode2(@Part("phone") String phone);

    @GET("/app/loginKeyReset")
    Call<BaseDTO> modifyPassword(@Query("phone") String phone, @Query("loginKey") String loginKey, @Query("captcha") String captcha);

    //http://139.224.234.222:8081/app/getQuestionList?type=0&pageNum=0
    //发现页数据
    @GET("/app/getQuestionList")
    Call<FindInfo> requestFindData(@Query("type") int type, @Query("pageNum") int pageNum);

    ///app/publishQuestion?content=?
    @POST("/app/publishQuestion")
    @Multipart
    Call<BaseDTO> commitFindSay(@Part("content") String content, @Part List<MultipartBody.Part> fileParts, @Part("issueRange") int issueRange);

    //发表评论
    @POST("app/publishComment")
    @Multipart
    Call<BaseDTO> commitComment(@Part("questionId") int questionId, @Part("content") String content, @Part("toUserId") int toUserId, @Part("isResponse") int isResponse, @Part List<MultipartBody.Part> file);


    //发表子评论
    @POST("app/publishComment")
    @Multipart
    Call<BaseDTO> commitComment2(@Part("questionId") int questionId, @Part("parentId") int parentId, @Part("content") String content, @Part("toUserId") int toUserId, @Part("isResponse") int isResponse, @Part List<MultipartBody.Part> file);

    //获取评论
    ///app/findTopCommentByQuestionId?pageNum=0&questionId=121
    @GET("/app/findTopCommentByQuestionId?pageNum=0")
    Call<FrendCircleBean> requestFrendDatas(@Query("questionId") int questionId);

    //点赞问题
    @POST("/app/questionOrComment/likeSwitch")
    @Multipart
    Call<BaseDTO> commitLikeSwitch(@Part("questionId") int questionId, @Part List<MultipartBody.Part> file);

    //点赞问题
    @POST("/app/questionOrComment/likeSwitch")
    @Multipart
    Call<BaseDTO> commitLikeSwitch2(@Part("commentId") int commentId, @Part List<MultipartBody.Part> file);


    //收藏问题
    @POST("/app/question/collectionSwitch")
    @Multipart
    Call<BaseDTO> commitcollectionSwitch(@Part("questionId") int questionId, @Part List<MultipartBody.Part> file);


    //关注
    @POST("/app/user/fanSwitch")
    @Multipart
    Call<BaseDTO> commitFan(@Part("userId") int userId, @Part List<MultipartBody.Part> file);

    //搜索
    @GET("/app/search")
    Call<FindSearchBean> commitSearch(@Query("type") int type, @Query("searchValue") String searchValue);

    //

    /**
     * 删除评论
     *
     * @param commentId
     * @param file
     * @return
     */
    @POST("/app/deleteComment")
    @Multipart
    Call<BaseDTO> commitDeleteComment(@Part("commentId") int commentId, @Part List<MultipartBody.Part> file);


    /**
     * 返回已被关注的对象
     *
     * @param pageNum
     * @return
     */
    @GET("/app/findUserFollowed")
    Call<FanSwitchBean> requestFanBean(@Query("pageNum") int pageNum);


    /**
     * 返回已被关注的对象
     *
     * @param userId
     * @param pageNum
     * @return
     */
    @GET("/app/questionModule/findQuestionByUserId")
    Call<FindInfo> requestFanUserBean(@Query("userId") int userId, @Query("pageNum") int pageNum);

    /**
     * 删除问题
     *
     * @param questionId
     * @param file
     * @return
     */
    @POST("/app/deleteQuestion")
    @Multipart
    Call<BaseDTO> commitDeleteCircle(@Part("questionId") int questionId, @Part List<MultipartBody.Part> file);


    /**
     * 企业认证
     *
     * @param orgCode
     * @return
     */
    @GET("/app/tourist/become/regular")
    Call<HxCheckOrgBean> checkOrgCode(@Query("orgCode") String orgCode);

    /**
     * 提交经纬度
     *
     * @return
     */
    @POST("/app/commitLngLatManagementPlatform")
    Call<BaseDTO> commitLngLat();

    /******************************************* 工作模块*********************************************/

    /**
     * 考勤 添加签到
     *
     * @param files
     * @param date
     * @param stationCode
     * @param lng
     * @param lat
     * @param des
     * @param taskId
     * @return
     */
    @POST("/app/addSign")
    @Multipart
    Call<BaseDTO> addSign(@Part List<MultipartBody.Part> files, @Part("date") Long date,
                          @Part("stationCode") String stationCode, @Part("lng") Double lng,
                          @Part("lat") Double lat, @Part("des") String des, @Part("taskId") Integer taskId);


    /**
     * 考勤 添加描述
     *
     * @param signId
     * @param fileParts
     * @param typeIds
     * @param des
     * @param type
     * @return
     */
    @POST("/app/addSignInfo")
    @Multipart
    Call<BaseDTO> commitAddSignIfo(@Part("signId") int signId, @Part List<MultipartBody.Part> fileParts
            , @Part("typeIds") String typeIds, @Part("des") String des, @Part("type") int type);


    /**
     * 考勤 删除图片
     *
     * @param id
     * @return
     */
    @GET("/app/deleteWorktaskSigninImg")
    Call<BaseDTO> deleteSignImg(@Query("id") int id);


    /**
     * 考勤 考勤统计
     *
     * @param year
     * @param month
     * @param day
     * @return
     */
    @GET("/app/signHistory")
    Call<SignHistoryDTO> getSignHistory(@Query("year") Integer year, @Query("month") Integer month, @Query("day") Integer day);


    /**
     * 工单 派工单
     *
     * @return
     */
    @GET("/app/arrangeTaskList")
    Call<ArrangeWorkTaskDTO> getArrangeTaskList();


    /**
     * 暂停派工单
     *
     * @param arrangeTaskId
     * @return
     */
    @GET("/app/arrangeTask/suspend")
    Call<ArrangeTaskPauseDTO> getArrangeTaskPause(@Query("arrangeTaskId") Integer arrangeTaskId);


    /**
     * 重启派工单
     *
     * @param arrangeTaskId
     * @return
     */
    @GET("/app/arrangeTask/restart")
    Call<ArrangeTaskPauseDTO> getArrangeTaskRestart(@Query("arrangeTaskId") Integer arrangeTaskId);


    /**
     * 工单 记录
     *
     * @param year
     * @param month
     * @return
     */
    @GET("/app/arrangeTaskListHistory")
    Call<ArrangeWorkTaskDTO> getArrangeTaskListHistory(@Query("year") Integer year, @Query("month") Integer month);


    /**
     * 巡检单详情
     *
     * @param workTaskId
     * @param stationCode
     * @param taskType
     * @return
     */
    @GET("/app/workTaskDetail")
    Call<CheckTaskDetailDTO> getCheckTaskDetail(@Query("workTaskId") Integer workTaskId, @Query("stationCode") String
            stationCode, @Query("taskType") Integer taskType);


    /**
     * 维修单详情 和巡检单接口一样，根据taskType区分
     *
     * @param workTaskId
     * @param stationCode
     * @param taskType
     * @return
     */
    @GET("/app/workTaskDetail")
    Call<RepairTaskDetailDTO> getRepairTaskDetail(@Query("workTaskId") Integer workTaskId, @Query("stationCode") String
            stationCode, @Query("taskType") Integer taskType);

    @GET("/app/commitXunJian")
    Call<BaseDTO> commitXunJian(@Query("workTaskId") int workTaskId, @Query("stationCode") String stationCode);


    /**
     * 工作流 获取待办任务
     *
     * @param page
     * @param size
     * @return
     */
    @GET("/app/workflowTaskList")
    Call<WorkFlowDTO> getWorkFlowTaskList(@Query("page") int page, @Query("size") int size);


    /**
     * 工作流 巡检单
     *
     * @param arrangeTaskId
     * @return
     */
    @GET("/app/xunJianDetail")
    Call<WorkFlowTaskDTO> getXunJianDetail(@Query("arrangeTaskId") String arrangeTaskId);


    /**
     * 工作流 巡检计划
     *
     * @param xunJianPlanId
     * @return
     */
    @GET("/app/xunJianPlanDetail")
    Call<WorkFlowTaskDTO> getxunJianPlanDetail(@Query("xunJianPlanId") String xunJianPlanId);


    /**
     * 工作流 巡检单审核
     *
     * @param taskId
     * @param checkType
     * @param remark
     * @return
     */
    @GET("/app/taskCheck")
    Call<BaseDTO> getTaskCheck(@Query("taskId") String taskId, @Query("checkType") int checkType, @Query("remark") String remark);


    /**
     * 工作流 考核归档
     *
     * @param taskId
     * @param remark
     * @return
     */
    @GET("/app/examineTask")
    Call<BaseDTO> getExamineTask(@Query("taskId") String taskId, @Query("remark") String remark);


    /**
     * 工作流 巡检计划审核
     *
     * @param taskId
     * @param checkType
     * @param remark
     * @return
     */
    @GET("/app/xunJianPlanCheck")
    Call<BaseDTO> getXunJianPlanCheck(@Query("taskId") String taskId, @Query("checkType") int checkType, @Query("remark") String remark);


    /**
     * 工作流 分发人员
     *
     * @param arrangeTaskId
     * @return
     */
    @GET("/app/getArrangeUser")
    Call<ArrangeUserDTO> getArrangeUser(@Query("arrangeTaskId") String arrangeTaskId);


    /**
     * 工作流 维修保养审核
     *
     * @param arrangeTaskId
     * @return
     */
    @GET("app/arrangeTaskDetail")
    Call<RepairUPDTO> getarrangeTaskDetail(@Query("arrangeTaskId") String arrangeTaskId);


    /**
     * 工作流 提交分发
     *
     * @param arrangeTaskId
     * @param taskId
     * @param userIds
     * @return
     */
    @GET("/app/distributeUser")
    Call<BaseDTO> getDistributeUser(@Query("arrangeTaskId") String arrangeTaskId, @Query("taskId") String taskId, @Query("userIds") String userIds);


    /**
     * 出入车
     *
     * @param year
     * @param month
     * @return
     */
    @GET("/app/vehicleDriverList")
    Call<DriverListDTO> vehicleDriverList(@Query("year") Integer year, @Query("month") Integer month);


    /**
     * 出入车
     *
     * @param licensePlateNum
     * @param arrangeTaskId
     * @return
     */
    @GET("/app/unbindVehicle")
    Call<BaseDTO> unbindVehicle(@Query("licensePlateNum") String licensePlateNum, @Query("arrangeTaskId") Integer arrangeTaskId);

    /**
     * 开启工单
     *
     * @param workTaskId
     * @return
     */
    @GET("/app/acceptWorkTask")
    Call<BaseDTO> acceptWorkTask(@Query("workTaskId") Integer workTaskId);


    /**
     * 提交巡检项
     *
     * @param workTaskId           巡检任务单ID
     * @param stationCode          站点编号
     * @param customAroundItemData 巡检项实体ID及其结果
     * @param customCheckPointData 点检项实体ID及其结果
     * @return
     */
    @POST("/app/commitXunJianRadio")
    @Multipart
    Call<BaseDTO> commitXunJianRadio(@Part("workTaskId") Integer workTaskId, @Part("stationCode") String stationCode
            , @Part("customAroundItemData") String customAroundItemData, @Part("customCheckPointData") String customCheckPointData);


    /**
     * 站点 信息
     *
     * @param stationCode
     * @return
     */
    @GET("/app/stationInfo")
    Call<StationDTO> getStationInfo(@Query("stationCode") String stationCode);


    /**
     * 站点 所有组织无区域选择
     *
     * @return
     */
    @GET("/app/findAllOrgList")
    Call<AllOrgDTO> findAllOrgList();

    //

    /**
     * 站点 所有组织 区域选择
     *
     * @return
     */
    @GET("/app/findAllOrgList1")
    Call<AreaOrgDTO> findAllOrgList1();


    /**
     * 站点 图片
     *
     * @param stationCode
     * @return
     */
    @GET("/app/getStationImg")
    Call<StationImgDTO> getStationImg(@Query("stationCode") String stationCode);


    /**
     * 站点 上传图片
     *
     * @param stationCode
     * @param files
     * @param des
     * @return
     */
    @POST("/app/uploadStationImg")
    @Streaming
    @Multipart
    Call<BaseDTO> uploadStationImg(@Part("stationCode") String stationCode, @Part List<MultipartBody.Part> files, @Part("des") String des);


    /**
     * 站点 设备图片
     *
     * @param deviceCode
     * @return
     */
    @GET("/app/getDeviceImg")
    Call<DeviceImgDTO> getDeviceImg(@Query("deviceCode") String deviceCode);


    /**
     * 站点 更新设备图片
     *
     * @param deviceCode
     * @param files
     * @param des
     * @return
     */
    @POST("/app/uploadDeviceImg")
    @Streaming
    @Multipart
    Call<BaseDTO> uploadDeviceImg(@Part("deviceCode") String deviceCode, @Part List<MultipartBody.Part> files, @Part("des") String des);


    /**
     * 站点 设备
     *
     * @param id
     * @return
     */
    @GET("app/deviceImageHome")
    Call<BaseDTO> setDeviceCover(@Query("imageId") int id);


    /**
     * 站点 设备
     *
     * @param id
     * @return
     */
    @GET("app/stationImageHome")
    Call<BaseDTO> setStationCover(@Query("imageId") int id);


    /**
     * 站点 子设备详情
     *
     * @param deviceCode
     * @return
     */
    @GET("/app/subDeviceInfo")
    Call<SmallDeviceDTO> smallDeviceInfo(@Query("deviceCode") String deviceCode);


    /**
     * 站点 删除设备图片
     *
     * @param id
     * @return
     */
    @GET("app/deleteDeviceImg")
    Call<BaseDTO> deleteDeviceImg(@Query("deviceImgId") int id);

    //

    /**
     * 站点 删除站点图片
     *
     * @param id
     * @return
     */
    @GET("app/deleteStationImg")
    Call<BaseDTO> deleteStationImg(@Query("stationImgId") int id);


    /**
     * 站点 指标数据
     *
     * @param stationCode
     * @param deviceCode
     * @return
     */
    @GET("/app/deviceData")
    Call<DeviceDataListDTO> getDeviceData(@Query("stationCode") String stationCode, @Query("deviceCode") String deviceCode);


    /**
     * 站点 指标设备分栏
     *
     * @param deviceCode
     * @return
     */
    @GET("/app/getSubDevice")
    Call<DeviceListDTO> getSubDevice(@Query("deviceCode") String deviceCode);


    /**
     * 站点 指标
     *
     * @param stationCode
     * @return
     */
    @GET("/app/findDataTypeByStationCode")
    Call<StationTargetDTO> getFindDataTypeByStationCode(@Query("StationCode") String stationCode);


    /**
     * 站点 指标
     *
     * @return
     */
    @GET("/app/findNotStationOrgList")
    Call<ScStationColumnDTO> getFindNotStationOrgList();


    /**
     * 站点 dataitem
     *
     * @param stationCode
     * @return
     */
    @GET("/app/findDataInfoByStationCode")
    Call<TargetRunStataDTO> getFindDataInfoByStationCode(@Query("StationCode") String stationCode);

    //

    /**
     * 数据采集 获取所有设备
     *
     * @return
     */
    @GET("app/findEquList")
    Call<CollectDTO> getFindEquList();


    /**
     * 获取单个设备当前状态
     *
     * @param equipmentId
     * @return
     */
    @GET("app/findEquipmentState")
    Call<EquipmentDTO> getFindEquipmentState(@Query("equipmentId") String equipmentId);

    //

    /**
     * 获取对应设备操作历史记录
     *
     * @param equipmentId
     * @param pageNo
     * @return
     */
    @GET("app/findEquHistory")
    Call<EquHistoryDTO> getFindEquHistory(@Query("equipmentId") String equipmentId, @Query("pageNo") Integer pageNo);


    /**
     * 设备远控
     *
     * @param equipmentId
     * @param controlType
     * @param password
     * @return
     */
    @GET("app/remoteControl")
    Call<BaseDTO> getRemoteControl(@Query("equipmentId") String equipmentId, @Query("controlType") Integer controlType, @Query("password") String password);


    /**
     * 站点 dataitem
     *
     * @param stationCode
     * @param dataTypeId
     * @param dataItemId
     * @return
     */
    @GET("/app/findDataItemByDataTypeAndSc")
    Call<TargetRunStataDTO> getFindDataItemByDataTypeAndSc(@Query("StationCode") String stationCode, @Query("dataTypeId") String dataTypeId, @Query("dataItemId") String dataItemId);


    /**
     * 远程控制输入密码
     *
     * @param password
     * @return
     */
    @POST("/app/getPass")
    Call<BaseDTO> getPass(@Query("password") String password);


    /**
     * 远程控制设备状态
     *
     * @param fullCode
     * @param value
     * @return
     */
    @POST("/app/changeValue")
    Call<HxChangeValveBean> getChangeValue(@Query("fullCode") String fullCode, @Query("value") String value);

    /**
     * 站点 获取站点设备曲线的数据
     *
     * @author:guokailin time:2017/7/24 11:18
     */
    @GET("/app/dataInfo/findDataValue")
    Call<String> getDeviceKeyData(@Query("dataInfoIds") String fullCode, @Query("endDate") String endDate, @Query("startDate") String startDate);


    /**
     * 站点 工艺图
     *
     * @param deviceCode
     * @param stationCode
     * @return
     */
    @GET("/app/SVGView")
    Call<SVGViewDTO> getSVGView(@Query("deviceCode") String deviceCode, @Query("stationCode") String stationCode);


    /**
     * 站点 下载工艺图
     *
     * @param url
     * @return
     */
    @Streaming
    @GET
    Call<ResponseBody> downloadFile(@Url String url);


    /**
     * 站点 工艺图实时数据
     *
     * @param stationCode
     * @param fileCode
     * @return
     */
    @GET("/app/svgDataValue")
    Call<String> svgDataValue(@Query("stationCode") String stationCode, @Query("fileCode") String fileCode);


    /**
     * 站点 设备信息
     *
     * @param deviceCode
     * @return
     */
    @GET("/app/deviceInfo")
    Call<BigDeviceDTO> deviceInfo(@Query("deviceCode") String deviceCode);


    /**
     * 站点 工作记录
     *
     * @param deviceCode
     * @return
     */
    @GET("/app/workTaskRecord")
    Call<RepairListDTO> repairRecord(@Query("deviceCode") String deviceCode);


    /**
     * 出车
     *
     * @param id
     * @param qrCode
     * @return
     */
    @GET("/app/commitWaterInLet")
    Call<WaterIntakeDTO> commitWaterInLet(@Query("itemId") int id, @Query("qrCode") String qrCode);


    /**
     * 条形码绑定
     *
     * @param id
     * @param qrCode
     * @return
     */
    @GET("/app/commitQrCode")
    Call<WaterIntakeDTO> commitQrCode(@Query("id") int id, @Query("qrCode") String qrCode);


    /**
     * 出车 车辆信息
     *
     * @param searchValue
     * @param pageNo
     * @return
     */
    @GET("/app/searchVehicle")
    Call<SearchDTO> searchVehicle(@Query("searchValue") String searchValue, @Query("pageNo") int pageNo);

    //

    /**
     * 出车 搜索车辆
     *
     * @param searchValue
     * @param pageNo
     * @return
     */
    @GET("/app/searchSiteFeedbackStation")
    Call<SearchDTO> searchStation(@Query("searchValue") String searchValue, @Query("pageNo") int pageNo);

    //

    /**
     * 出车 添加车辆
     *
     * @param licensePlateNum
     * @param arrangeTaskId
     * @return
     */
    @GET("/app/addVehicle")
    Call<BaseDTO> addVehicle(@Query("licensePlateNum") String licensePlateNum, @Query("arrangeTaskId") Integer arrangeTaskId);


    /**
     * 申报故障 添加申报信息
     *
     * @param stationCode
     * @param type
     * @param des
     * @param fileParts
     * @return
     */
    @POST("/app/addSiteFeedback")
    @Multipart
    Call<BaseDTO> addSiteFeedback(@Part("stationCode") String stationCode, @Part("type") int type, @Part("des") String des, @Part List<MultipartBody.Part> fileParts);

    //

    /**
     * 申报故障 我的申报记录
     *
     * @param year
     * @param month
     * @return
     */
    @GET("/app/siteFeedbackList")
    Call<FeedBackListDTO> siteFeedbackList(@Query("year") Integer year, @Query("month") Integer month);


    /**
     * 告警记录
     *
     * @return
     */
    @GET("/app/warningList")
    Call<HxWarningBean> warningList();


    /**
     * 公告记录
     *
     * @return
     */
    @GET("/app/bulletinList")
    Call<HxBulletinList> bulletinList();

    /**
     * 厂站巡检和其他巡检
     *
     * @param arrangeTaskId
     * @return
     */
    @GET("/app/workTaskList")
    Call<WorkTaskListDTO> getWorkTaskList(@Query("arrangeTaskId") Integer arrangeTaskId);

    //

    /**
     * 工单路线
     *
     * @param arrangeTaskId
     * @return
     */
    @GET("/app/arrangeTaskStationList")
    Call<TaskRoutDTO> getArrangeTaskStationList(@Query("arrangeTaskId") Integer arrangeTaskId);

    /**
     * 厂内巡检
     *
     * @param arrangeTaskId
     * @return
     */
    @GET("/app/findXunJianStructure")
    Call<HxInHousePollingBean> getFindXunJianStructure(@Query("arrangeTaskId") Integer arrangeTaskId);

    /**
     * 筑物和设备厂内巡检构项
     *
     * @param xjStructureId
     * @return
     */
    @GET("/app/findXunJianStructureInfo")
    Call<HxFacilityTaskDetailBean> getFindXjStructuenInfo(@Query("xjStructureId") Integer xjStructureId);

    /**
     * 提交构筑巡检项和设备巡检项
     *
     * @return
     */
    @POST("/app/commitXunJianItem")
    @Multipart
    Call<HxCommitTaskDetailBean> putCommitXunJianItem(@Part("xunjianItemRecordId") Integer xunjianItemRecordId, @Part("state") Integer state, @Part("des") String des, @Part List<MultipartBody.Part> fileParts);

    /**
     * 提交巡检单
     *
     * @param xunJianStructureId
     * @param xunJianItemData
     * @return
     */
    @POST("/app/commitXunJianStructure")
    @Multipart
    Call<BaseDTO> putCommitXunJianStructue(@Part("xunJianStructureId") Integer xunJianStructureId, @Part("xunJianItemData") String xunJianItemData);

    /**
     * 查询全部专题
     *
     * @return
     */
    @GET("/app/special/find")
    Call<HxUserTagBean> getSpecialFind();

    /**
     * 提交 用户订阅专题
     *
     * @param userId
     * @param specialIds
     * @return
     */
    @POST("/app/special/subscribe")
    @Multipart
    Call<BaseDTO> putCommitSpecial(@Part("userId") Integer userId, @Part("specialIds") String specialIds);

    /**
     * 考勤打卡获取数据接口
     *
     * @param date
     * @return
     */
    @POST("/app/attendance/view")
    @Multipart
    Call<HxPunchCardViewBean> getAttendance(@Part("date") String date);

    /**
     * @param type 打卡类型
     * @param lng  经度
     * @param lat  纬度
     * @return
     */
    @POST("/app/attendance/sign")
    @Multipart
    Call<HxPunchCardSignBean> getAttendanceSign(@Part("type") int type, @Part("lng") Double lng, @Part("lat") Double lat);

    /**
     * 返回某个月份内全部考勤的汇总信息。包括出勤、迟到等的次数，和考勤日历的信息。
     *
     * @param month
     * @return
     */
    @POST("/app/attendance/summary")
    @Multipart
    Call<HxPunchCardSummaryBean> getSummary(@Part("month") String month);

    @POST("/app/attendance/day/report")
    @Multipart
    Call<HxPunchCardReportBean> getReportDay(@Part("date") String date);


    /**
     * 首创接口api
     *
     * @param stationCode
     * @return
     */
    @GET("/app/stationInfo")
    Call<ScStationDTO> getScStationInfo(@Query("stationCode") String stationCode);


    /**
     * 站点 指标
     *
     * @return
     */
    @GET("/app/findNotStationOrgList")
    Call<StationColumnDTO> getScFindNotStationOrgList();

    @POST("/app/findOrgStationsByPage")
    Call<HxScStaionListBean> getScFindOrgStationByPage(@Query("orgCode") String orgCode, @Query("pageNum") int pageNum, @Query("pageSize") int pageSize);

    /**
     * 氨氮指标统计图
     *
     * @param fullcode
     * @param timestamp
     * @return
     */
    @GET("/app/getMaxMinValue")
    Call<HxScStationRealDTO> getMaxMinValue(@Query("fullcode") String fullcode, @Query("timestamp") Long timestamp);


    /**
     * 首创版本更新
     *
     * @param versionName
     * @param type
     * @return
     */
    @GET("/app/checkVersion")
    Call<HxScAppVersionDTO> SccheckUpdate(@Query("version") String versionName, @Query("type") int type);


    /**
     * 站点维修记录
     *
     * @param deviceCode
     * @param pageNum
     * @param pageSize
     * @return
     */
    @GET("/app/workTaskRecord")
    Call<RepairListDTO> getScRepairRecord(@Query("deviceCode") String deviceCode, @Query("pageNum") int pageNum, @Query("pageSize") int pageSize);


    /**
     * 预案管理
     *
     * @param planType
     * @return
     */
    @GET("/app/findTablePlan")
    Call<PlanContentDTO> getFindTablePlan(@Query("planType") int planType);


    /**
     * 知识库
     *
     * @return
     */
    @GET("/app/findTypeNode1")
    Call<RepositoryDTO> getFindTypeNode();


    /**
     * //知识库文件
     *
     * @param parentId
     * @return
     */
    @GET("/app/findTypeNodeAll")
    Call<RepoContentDTO> getFindTypeNodeAll(@Query("parentId") int parentId);


    /**
     * 综合数据
     *
     * @param year
     * @return
     */
    @GET("/app/analysis")
    Call<HxScSyncDataDTO> getSPTAnalysis(@Query("year") String year);


    /**
     * SPT运维树形结构
     *
     * @return
     */
    @GET("/app/getOrgTree")
    Call<HxMaintenanceDTO> getSPTOrgTree();


    /**
     * SPT运维分析图表
     *
     * @param dateStr
     * @param codes
     * @return
     */
    @POST("app/getAnalysis")
    Call<HxAnalysisDTO> getSPTAnalysis(@Query("dateStr") String dateStr, @Query("codes") String codes);


    /**
     * SPT初始化指标
     *
     * @param stationCode
     * @return
     */
    @GET("app/getInitialized")
    Call<HxSPTTargetDTO> getSPTInitialized(@Query("stationCode") String stationCode);


    /**
     * 刷新设备状态
     *
     * @param stationCode
     * @return
     */
    @GET("app/getTargetStatus")
    Call<HxSPTTargetDTO> getTargetStatus(@Query("stationCode") String stationCode);


    /**
     * 手动自动 远控
     *
     * @param stationCode
     * @param goalState
     * @return
     */
    @GET("app/autoMode")
    Call<BaseDTO> autoMode(@Query("stationCode") String stationCode,@Query("goalState") int goalState);

    /**
     * SPT上传配件信息
     *
     * @param arrangeTaskId
     * @param value
     * @return
     */
    @GET("app/uploadWorkTaskAccessories")
    Call<BaseDTO> getWorkTaskParts(@Query("workTaskId") Integer arrangeTaskId, @Query("value") String value);


}

